<?php
	
class Usuario extends Persona
{ 	
	var $login="";
	var $nivel_acceso="";
	var $password="";
	var $activo=1;
	var $email="";
	var $foto=null;
	var $tema="ext3/resources/css/xtheme-blue.css";
  
  	/*arr de sucursales*/
	var $sucursal=null;
	
  	/*sql q selecciona todos los productos*/
/*	static $sql_defecto="SELECT u. * , pn.nombres, pn.apellidos,us.*, f.ruta,e.email
						FROM   persona_nombres pn
						RIGHT JOIN (
							emails e
							RIGHT JOIN (
								fotos f
								RIGHT JOIN ( usuarios_sucursal us
									RIGHT JOIN usuarios u ON u.login = us.login_usuario
								) ON u.login = f.id_propietario
							)ON u.login = e.id_propietario
						) ON u.login = pn.id_propietario
						AND pn.tabla = 'usuarios'";*/

    static $sql_defecto="select u.*,pn.nombres, pn.apellidos, suc.id_sucursal, suc.nombre as sucursal  from usuarios u
                    JOIN usuarios_sucursal us ON u.login = us.login_usuario
                    JOIN sucursales suc ON us.id_sucursal= suc.id_sucursal
                    JOIN persona_nombres pn ON u.login = pn.id_propietario AND pn.tabla = 'usuarios'
    ";
						
	function __construct()
	{
		parent::__construct("usuarios");
		$this->foto=new Foto();
		switch(func_num_args())
		{
			case 1:	if(trim(func_get_arg(0)) =="")return;
					$this->setId( func_get_arg( 0 ) );
					$this->cargar();
					break;
		}
	}
	
	/*Utilitarias*/
	
	/*
	 * Carga apartir de lainformacion  en la bd
	 */
	function cargar()
	{
	//	echo "2";
		//si el producto no existe
		if(!$this->existe())
		{
			$this->setId("-1");
			return;//no cargar
		}
		//		echo "3";
		//cargar a la persona
		
		$this->cargarPersona();
		
		$r=Usuario::$sql_defecto." where u.login='".$this->getId()."'";
		//echo $r;
		$con=new Conexion(); 
		$con->ejecutar($r);
		
		$con->traerFilaPorNombre();
		
		$this->setNivelAcceso($con->get("nivel_acceso"));
		$this->setEmail($con->get("email"));
		//echo $con->get("email");
		$this->setFoto($con->get("ruta"));
		$this->setPassword($con->get("password"));
		$this->setActivo($con->get("activo"));
		$this->setFoto($con->get("ruta"));
		$this->setTema($con->get("tema"));
		
		#cargar las sucursales
		$this->sucursal=null;
		$r="select id_sucursal from usuarios_sucursal where login_usuario='".$this->getId()."'";
		$con->ejecutar($r);
		/*while(*/$con->traerFilaPorNombre();#)
			#$this->sucursales[$con->get("id_sucursal")]=new Sucursal($con->get("id_sucursal"));
		$this->sucursal=new Sucursal($con->get("id_sucursal"));
//		echo $this->sucursal->getId()."]";
	}
	
	function getMarcoHTML(){
		if(trim($this->telefono->toString())!="")
			$r='<div class="ud_ttdetalle">
					<img src="img/telefono.png" class="udfont">
					<div class="ud_tdetallet">'.$this->telefono->toString().'</div>
					<div style="clear:both;"></div>
				</div>';

		$e= '<div class="udmarco"><div class="ud_mfoto"><img src="img/avatars/'.$this->getFoto().'" class="ud_ffoto"><img src="img/user.png" class="udicono"></div><div class="ud_mdetalle"><div class="ud_ndetalle">'.$this->getNombre().'</div><div class="ud_ddetalle">'.$this->direccion->toString().'</div>'.$r.'</div></div>';
		return str_replace('"','\"',$e);
	}
	
	function getMarcoHTMLExt(){
		if(trim($this->telefono->toString())!="")
			$r='<div class="ud_ttdetalle">
					<img src="img/telefono.png" class="udfont">
					<div class="ud_tdetallet">'.$this->telefono->toString().'</div>
					<div style="clear:both;"></div>
				</div>';

		$e='<div class="udmarcot">
				<div class="ud_mfoto">
						<img src="img/avatars/'.$this->getFoto().'" class="ud_ffoto">
						<img src="img/user.png" class="udicono">
				</div>
				<div class="ud_mdetallet">
					<div class="ud_ndetallet">'.$this->getNombre().'</div>
					<div class="ud_ddetallet">'.$this->direccion->toString().'</div>
				</div>
					'.$r.'
					<div style="clear:both;"></div>
			</div>';
		return ereg_replace('[[:space:]]+', ' ', trim(str_replace('"','\"',$e)));
	}

	
	
	//agregar un usuario a la bd
	function insertar()
	{
		#agregar al usuario
		new Conexion("INSERT INTO usuarios VALUES ('".$this->getId()."','".$this->getNivelAcceso()."',
		'".$this->getPassword()."',".$this->getActivo().",'".$this->getTema()."')");

        new Conexion("INSERT INTO usuarios_sucursal VALUES ('".$this->getId()."','".$_POST['txt_sucursal']."')");

		#agregar a la persona
		$this->insertarPersona();
	}
	
	
	//checa si el usuario existen ya en la bd (el login almenos)
	function existe()
	{
		$con = new Conexion();
		$con->ejecutar("select * from usuarios where login='".$this->getId()."'");
		#consultar si ya existe ese login asignado
		if(!$con->vacio())
		#si hay filas
			return true;
		return false;	
	}
	

	
	//eliminar un usuario a la bd
	function eliminar()
	{
		//la llave primaria esta vacia
		if($this->vacio())
			return false;
		#eliminar al usuario
		$this->editarActivo(0);
		return "{success: true }";
	}
	
	function agregarSucursal($idsucu){
		new Conexion("insert into usuarios_sucursal values ('".$this->getId()."','".$idsucu."');");
		$sucu=new Sucursal($idsucu);
		#$this->sucursales[$idsucu]=$sucu;
		$this->sucursal=$sucu;
	}
	function editarSucursal($idsucu){
//		echo $this->sucursal->getId()." - ".$idsucu;
		if($this->sucursal->getId()!=$idsucu)
		{
			new Conexion("update usuarios_sucursal set id_sucursal='".$idsucu."' where  login_usuario='".$this->getId()."';");
			$sucu=new Sucursal($idsucu);
			#$this->sucursales[$idsucu]=$sucu;
			$this->sucursal=$sucu;
		}
	}
	
	function eliminarSucursal($idsucu=""){
		if(trim($idsucu) == "")
		{
			new Conexion("delete from usuarios_sucursal where login_usuario='".$this->getId()."';");
			unset($this->sucursal);
		}
		/*else
		{
			new Conexion("delete from usuarios_sucursal where login_usuario='".$this->getId()."' and id_sucursal='".$idsucu."';");
			unset($this->sucursales[$idsucu]);
		}*/
	}
	/*function tieneSucursal($_x){
		return (isset($this->sucursales[$_x]))?true:false;
	}*/
	
	
	function toGrid()
	{
		$foo=$this->getFoto();#(trim($this->getFoto())=="")?'<img src="./img/foto.png">':'<img src="../fotos/'.$this->getFoto().'">';
		
		$o = array(
	//		"foto"=> $foo,
			"login"=> $this->getId(),
			"datos"=>$this->getMarcoHTML(),
//			"nombre"=> $this->getApellidos().", ".$this->getNombres(),
//			"direccion"=> $this->direccion->toString(),
//			"telefono"=> $this->telefono->toString(),
			"slt_nivel"=> $this->getNivelAccesoGrid(),
			"sucursales"=> $this->sucursal->getNombre(),
		);
					
		/*if(count($this->sucursales) >1)
			$o["sucursales"]="Todas";
		else
			foreach($this->sucursales as $suc){
				$o["sucursales"]=$suc->getNombre();
				break;
			}
*/
		//agregar las sucursales
		//foreach($this->sucursales as $nombre=>$valor)
			//$o["sucursales"].=$nombre.", ";
		
		//if(count($this->sucursales)>0)
		//si hay mas de una sucursal, quitar la ultima coma
			//$o["sucursales"]=substr($o["sucursales"],0,strlen($o["sucursales"])-2);
			
		return $o;
	}
	
	function toObjeto()
	{
		$o = array(
			"login"=> $this->getId(),
			"nombres"=> $this->getNombres(),
			"apellidos"=> $this->getApellidos(),
			"email"=> $this->getEmail(),
			"direccion"=> $this->direccion->toObjeto(),
			"telefono"=> $this->telefono->toObjeto(),
			"nivel_acceso"=> $this->getNivelAcceso(),
			"sucursal"=> $this->sucursal->getNombre()
		);
		
		//agregar las sucursales
		//foreach($this->sucursales as $nombre=>$valor)
			//$o["sucursales"][$nombre]=$valor->toObjeto();

		return $o;
	}
	function toJson()
	{
		if($this->getId()=="-1")
		//si el producto no existe
			return '{"success":false,"error":"El usuario no existe"}';
		
		return json_encode($this->toObjeto());
	}
	function toData(){
		$d=array(
			"slt_nivel"=> $this->getNivelAcceso(),
			"txt_apellidos"=> $this->getApellidos(),
			"txt_ciudad"=> $this->direccion->getCiudad(),
			"txt_colonia"=> $this->direccion->getColonia(),
			"txt_cp"=> $this->direccion->getCp(),
			"txt_dir"=> $this->direccion->getDireccion(),
			"txt_email"=> $this->getEmail(),
			"txt_estado"=> $this->direccion->getEstado(),
			"txt_fax"=> $this->telefono->getTelefonoCel(),
			"txt_nombres"=> $this->getNombres(),
			"txt_tel_casa"=> $this->telefono->getTelefonoCasa(),
			"txt_tel_trabajo"=> $this->telefono->getTelefonoTrabajo(),
			"txt_usuario"=> $this->getId(),
			
			/*	El password esta encriptado con md5.
				Para editar, le mando un password con 6 caracteres (J05u3.)
				Cuando lo edite, se compara si sigue siendo J05u3.
				Si es el mismo, no se edita, si no, se edita.
			*/ 
			"pwd_pass"=>"J05u3.",
			"pwd_vpass"=>"J05u3.",
			
			"sucursal"=> $this->sucursal->getNombre(),
                        "id_sucursal"=> $this->sucursal->getId()
		);
		
		/*if(count($this->sucursales) >1)
			$o["ids"]="Todas";
		else
			foreach($this->sucursales as $suc){
				$o["ids"]=$suc->getId();
				break;
			}*/
		return $d;
	}
	function toForm()
	{
		$o = array(
			"success"=>true,
			"cargar"=>true,
			"data"=>$this->toData()
		);
		
		//agregar las sucursales
		//foreach($this->sucursales as $nombre=>$valor)
			//$o["data"]["cbU_".$nombre]="on";
			
		return json_encode($o);
	}
	function toVista()
	{
		$o = array(
			"id"=> $this->getId(),
			"foto"=>$this->getFoto(),
			"nombre"=> $this->getNombre(),
			"txt_direccion"=> $this->direccion->toString(),
			"txt_tels"=> $this->telefono->toString()
		);
		return $o;
	}
	function listarSelect($nn=null,$dn=null)
	{
		$query=Usuario::$sql_defecto." where u.activo=1 order by pn.apellidos";
		$con=new Conexion();
		$con->ejecutar($query);
			
		$respuesta="{numFilas:'".$con->numFilasResultado()."',
			data: [";
		
		#le vamos concatenando a la respuesta cada opcion
		while($con->traerFilaPorNombre()) {
			$this->setId($con->get("login"));
			$this->cargar();
			
			$respuesta.= json_encode($this->toVista()).",";
	    }
		
		#si hay almenos una fila, nos queda una coma al final. Hay que quitarla
		if(!$con->vacio())
			$respuesta = substr($respuesta,0,strlen($respuesta)-1);
		
		$respuesta.= "]}";
		#imprimir el resultado
		return $respuesta;
	}
	
	
	function agregar()
	{
		/*
			cbU_Mexico=on
			cbU_Oaxaca=on
			operacion=insertar
			pwd_pass=123123
			slt_nivel=Distribuidor
			tipo=usuario
			txt_apellidos=asd
			txt_ciudad=asd
			txt_colonia=asd
			txt_cp=asd
			txt_dir=dsa
			txt_email=tio_che@hotmail.com
			txt_estado=asd
			txt_fax=asd
			txt_nombres=asd
			txt_pais=asd
			txt_tel_casa=asd
			txt_tel_trabajo=asd
			txt_usuario=e
			vpass=123123
		*/

		$this->setId(trim($_POST['txt_usuario']));
		$this->setPassword(trim($_POST['pwd_pass']));
		$this->setNombres(toHtml(trim($_POST['txt_nombres'])));
		$this->setApellidos(toHtml(trim($_POST['txt_apellidos'])));
		$this->editarEmail(toHtml(trim($_POST['txt_email'])));//$this->setEmail(toHtml(trim($_POST['txt_email'])));
		$this->setDireccion(toHtml(trim($_POST['txt_dir'])),toHtml(trim($_POST['txt_colonia'])),toHtml(trim($_POST['txt_ciudad'])),toHtml(trim($_POST['txt_estado'])),toHtml(trim($_POST['txt_cp'])));
		$this->setTelefono(trim($_POST['txt_tel_casa']),trim($_POST['txt_tel_trabajo']),trim($_POST['txt_fax']));
		$this->setNivelAcceso(trim($_POST['slt_nivel']));
		
		#consultar si ya existe ese login asignado
		if($this->existe())
		#si hay filas
		{
			return "{success: false, error:'El usuario ya existe. Pruebe con otro login.' }";
		}	
		
		#insertar al usuario
		$this->insertar();
		new Conexion("insert into usuarios_sucursal values ('".$this->getId()."','".$_POST['ids']."');");
		#insertar sucursales
		//foreach($_POST as $nombre=> $valor)
			//if(substr($nombre,0,4)=="cbU_" && $valor=="on")
			#insertar las sucursales que haya elejido
				//$this->agregarSucursal( $_POST['sucursal'] );#substr($nombre,4) );
				
		return "{success: true }";
	}
	
	function inFile()
	{
		$name="txt_foto";
		$n_base = basename($_FILES[$name]['name']);
		if(is_array($_FILES)){
		
			$tipo=$_FILES [$name]['type'];
			
			if($tipo != "image/pjpeg" && $tipo != "image/jpeg" && $tipo != "image/jpeg")
			{
				$success = false;
				return "{success: false,error:'El formato de la imagen no corresponde a las habilitadas. Por favor intentelo con otro formato de imagen'}";
			}
			else if($_FILES [$name]['size'] >2010000){
				$success = false;
				return "{success: false,error:'El tamano de la imagen supera al tamano permitido. Por favor intentelo con otra imagen'}";
			}
			
			//el tamano y el tipo corresponden
			else{
				$ss=new Session();
				$nombre= $ss->getId().rand(1,1000).substr($n_base,strlen($n_base)-4);
				if(move_uploaded_file($_FILES[$name]['tmp_name'], "../img/avatars/".$nombre))
				{
					$success = true;
					$error=$nombre;
					
					//almacenarlo en la info y en la BD
					//$ss->editarFoto($nombre);
					new Conexion("UPDATE fotos SET ruta='$nombre' where id_propietario='".$ss->getId()."'");
					//return "{success: true }";
					//sleep(1);
    				return "{success:true, name :'".$nombre."'}";
				}
				else
				{
					$success = false;
					return "{success: false,error:'Se ha producido un error al subir la imagen. Por favor intentelo de nuevo'}";
				}			
			}
			return $error;
		}
	}
	//editar un usuario a la bd
	function editar()
	{
		#foreach($_POST as $n=>$val)
		#echo $n."=".$val." - ";
		$this->editarNombres(toHtml($_POST['txt_nombres']));
		$this->editarApellidos(toHtml($_POST['txt_apellidos']));
		$this->editarEmail(toHtml(trim($_POST['txt_email'])));
		$this->editarDireccion(toHtml($_POST['txt_dir']),toHtml($_POST['txt_colonia']),toHtml($_POST['txt_ciudad']),toHtml($_POST['txt_estado']),toHtml($_POST['txt_cp']));
		$this->editarTelefono($_POST['txt_tel_casa'],$_POST['txt_tel_trabajo'],$_POST['txt_fax']);
		
		if(trim($_POST['pwd_pass'])!="12caaa167b678fab78f5dfc7a285dc4d")		
			$this->editarPassword($_POST['pwd_pass']);
		
		if($this->getNivelAcceso() != "Administrador")
		{#si no es el admin
		
			#editar el nivel de acceso
			$this->editarNivelAcceso($_POST['slt_nivel']);
			
			#borrar todas las que ya tenia y despues meter todas las que ya elejio
		//	$this->eliminarSucursal();
				
			#insertar sucursales
			//foreach($_POST as $nombre=> $valor)
				//if(substr($nombre,0,4)=="cbU_" && $valor=="on")
				#insertar las sucursales que haya elejido
		}		
		$this->editarSucursal($_POST['ids'] );
				
		return "{success: true }";
	}
	
	function listarGrid($pagina,$query)
	#function listarGrid($query,$start,$end)
	{
		$con=new Conexion();
		$con->ejecutar($query);		
		$respuesta=array("numFilas"=>$con->numFilasResultado());
		

		$con->ejecutar($query." limit ".(($pagina-1)*PAGINA_CUANTOS).",".PAGINA_CUANTOS.";"); 

        $arr_user=array();
		#le vamos concatenando a la respuesta cada opcion
		while($fila=$con->traerFilaPorNombre()) {
            array_push($arr_user,$fila);
            //print_r($fila);
			//$this->setId($con->get("login"));
			//$this->cargar();
			//$respuesta["data"][count($respuesta["data"])]= $this->toGrid();
			#echo $this->conexion->get("login")." - ";
	    }
        $respuesta["success"]= true;
        $respuesta["data"]= $arr_user;
		#imprimir el resultado
		return str_replace("\\\\\\", "\\", json_encode($respuesta));//$respuesta));
	}
	
	
	/*Funciones de filtro*/
	function filtroSQL($p)
	{
		if(trim($p)=="")
		//hacer la consulta sin condiciones
			return Usuario::$sql_defecto."WHERE u.activo=1 group by u.login order by pn.nombres ";
		
		$p=json_decode( fromURL($p));
	 
		$query=Usuario::$sql_defecto." WHERE u.activo=1 ";
			
		if(isset($p->nombres))
			$query.= " and ".$this->buscarNombre($p->nombres)." ";

		if(isset($p->usuario))
			$query.= " and u.login='".$p->usuario."' ";
			
		if(isset($p->sucursal))
			$query.= " and us.id_sucursal='".$p->sucursal."' ";

		$query.=" group by u.login order by pn.nombres ";
		//hacer la consulta
		return $query;				
	}
	
	function cambiarTema(){
		$this->editarTema($_POST['t']);
		return "{success:true}";
	}


	function listar($pagina,$parametros)	
	#function listar($start,$end,$parametros)
	{
		//crear la consulta sql
		$sql=$this->filtroSQL($parametros);
        //echo $sql;exit;
		return $this->listarGrid($pagina,$sql);
		#return $this->listarGrid($sql,$start,$end);
	}
	
	/*funciones SET y GET*/
	
	function setId($_x){$this->login=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : trim($_x);}
	function setNivelAcceso($_x){$this->nivel_acceso=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : trim($_x);}
	function setPassword($_x){$this->password=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : trim($_x);}
	function setActivo($_x){$this->activo=(!$_x || trim($_x)=="" || $_x=="null" || $_x==null) ? 0:1;}
	function setTema($_x){$this->tema=$_x;}
	function setFoto($_x){
		$this->foto->setId($this->getId());
		$s=(trim($_x)=="" || $_x=="null" || $_x==null) ?"foto.jpg" : trim($_x);
		$this->foto->set($s);
	}
	
	
  	function getId(){ return $this->login;}
	function getTema(){return $this->tema;}
	function getNivelAcceso(){return $this->nivel_acceso;}
	function getNivelAccesoImg(){
		switch($this->getNivelAcceso())
		{
			case "Cajero":$h="Man_DBrown";break;
			case "Contador":$h="Man_Grey";break;
			case "Empleado":$h="Man_Red";break;
			default:$h="Man_Brown";break;
		}
		return $h.".png";
	}
	function getNivelAccesoGrid(){
		$h=$this->getNivelAccesoImg();
		return '<img src=\"img/'.$h.'\"><br>'.$this->getNivelAcceso();
	}
	function getPassword(){return $this->password;}
	function getActivo(){ return $this->activo;}
	
	function editarNivelAcceso($x){
		if($x != $this->getNivelAcceso()){
			$this->setNivelAcceso($x);
			new Conexion("UPDATE usuarios SET nivel_acceso='".$this->getNivelAcceso()."' where login='".$this->getId()."'");
		}
	}
	function editarPassword($x){
		if($x != $this->getPassword()){
			$this->setPassword($x);
			new Conexion("UPDATE usuarios SET password='".$this->getPassword()."' where login='".$this->getId()."'");
		}
	}
	function editarTema($x){
		if($x != $this->getTema()){
			$this->setTema($x);
			new Conexion("UPDATE usuarios SET tema='".$this->getTema()."' where login='".$this->getId()."'");
		}
	}
	function editarActivo($x){
		if($x != $this->getActivo()){
			$this->setActivo($x);
			new Conexion("UPDATE usuarios SET activo=".$this->getActivo()." where login='".$this->getId()."'");
		}
	}
	//function setFoto($_x){if(trim($_x)!="" && $_x=="null" && $_x==null){$this->foto->setId($this->getId());$this->foto->set($_x);}}
	function getFoto(){return (trim($this->foto->get())!="")?$this->foto->get():"foto.jpg";//$this->getNivelAccesoImg();//"foto.png";
	}
	function editarFoto($x){
		if($x != $this->getFoto()){
			$this->setFoto($x);
			$this->foto->editar(trim($x));
		}
	}
}
?>
